home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #119 (1991-03)(Amiga User Group Deutschland e.V.).zip / Franz PD Disk #119 (1991-03)(Amiga User Group Deutschland e.V.).adf / Assembler_Programme / text.source < prev    next >
Text File  |  1989-07-03  |  8KB  |  193 lines

  1. ;**************** TEXT x,y,vf,hf,"..."***************** 
  2. ;*                                                    *
  3. ;*   Gibt einen Text an den Punktkoordinaten x,y in   *
  4. ;*   den Farben vf und hf aus.                        *
  5. ;*                                                    *
  6. ;* x = 0 - 639 \                                      *
  7. ;*              > je nach Fenstergröße (CLI = 640x200)*
  8. ;* y = 0 - 255 /                                      *
  9. ;*                                                    *
  10. ;* vf = Vorder- und hf = Hintergrundfarbe (0-31)      *
  11. ;*                                                    *
  12. ;* "..." = Text                                       *
  13. ;******************************************************
  14. ;*          © Juli 1989 by Michael Gottwald           *
  15. ;******************************************************
  16.  
  17. OpenLib  = -408
  18. CloseLib = -414
  19. Move     = -240
  20. Text     = -60
  21. SetAPen  = -342
  22. SetBPen  = -348
  23. Exit     = -144
  24.  
  25. ;----Librarys öffnen--------------------------------------------------
  26.  
  27. run:     move.l  a0,Pointer          ;Zeiger auf Parametertext retten
  28.          subq    #1,d0
  29.          beq     error               ;keine Parameter ? - dann Fehler
  30.          move.l  $4,a6
  31.          lea     Dosname,a1
  32.          jsr     OpenLib(a6)         ;Dos.Library öffnen
  33.          move.l  d0,DosBase
  34.          lea     GfxName,a1
  35.          jsr     OpenLib(a6)         ;Graphics.Library öffnen
  36.          move.l  d0,GfxBase
  37.          lea     IntName,a1
  38.          jsr     OpenLib(a6)         ;Intuition.Library öffnen
  39.          move.l  d0,IntBase
  40.  
  41. ;----Aktuellen RastPort holen und speichern---------------------------
  42.  
  43.          move.l  d0,a0
  44.          move.l  52(a0),a0           ;A0 = aktuelle Fensterstruktur
  45.          move.l  50(a0),RastPort     ;Zeiger auf RastPort holen
  46.  
  47. ;----X-Position holen ------------------------------------------------
  48.  
  49.          move.l  Pointer,a0          ;Zeiger auf Parametertext holen
  50.          bsr     getdez              ;1-3 stellige Dezimalzahl holen
  51.          move.l  d0,d3               ;X-Position retten
  52.          cmp.w   #639,d0             ;größer als 639 ?
  53.          bgt     error               ;ja, dann Fehler
  54.          
  55. ;----Y-Position holen und Cursorposition setzen-----------------------
  56.  
  57.          bsr     chkcom              ;auf Komma prüfen
  58.          bne     error               ;Nein, dann Fehler
  59.          bsr     getdez              ;Dezimalzahl (Y-Position) holen
  60.          cmp.w   #255,d0             ;größer als 255 ?
  61.          bgt     error               ;ja, dann Fehler
  62.          move.l  a0,Pointer          ;Parametertext-Zeiger retten
  63.          move.l  GfxBase,a0
  64.          move.l  d0,d1               ;Y-Position nach D1...
  65.          move.l  d3,d0               ;X-Position nach D0...
  66.          move.l  RastPort,a1         ;RastPort nach A1...
  67.          jsr     Move(a0)            ;...und Cursorposition setzen
  68.          
  69. ;----Vorder- und Hintergrundfarbe holen und setzen--------------------
  70.  
  71.          move.l  Pointer,a0
  72.          bsr     chkcom              ;auf Komma prüfen
  73.          bsr     getdez              ;Vordergrundfarbe holen
  74.          cmp.b   #31,d0              ;größer als 31 ?
  75.          bgt     error               ;dann Fehler
  76.          move.b  d0,APen             ;D0 retten
  77.          bsr     chkcom              ;auf Komma prüffen
  78.          bsr     getdez              ;Hintergrundfarbe holen
  79.          cmp.b   #31,d0
  80.          bgt     error
  81.          move.l  a0,Pointer
  82.          move.l  RastPort,a1
  83.          move.l  GfxBase,a6
  84.          jsr     SetBPen(a6)         ;Hintergrundfarbe setzen
  85.          move.b  APen,d0             ;Vordergrundfarbe zurückholen
  86.          move.l  RastPort,a1
  87.          move.l  GfxBase,a6
  88.          jsr     SetAPen(a6)         ;Vordergrundfarbe setzen
  89.  
  90. ;----Text holen und ausgeben------------------------------------------
  91.  
  92.          move.l  Pointer,a0
  93.          bsr     chkcom              ;auf Komma prüfen
  94. chkup:   cmp.b   #34,(a0)+           ;kommen Anführungstriche ?
  95.          bne     error               ;nein, dann Fehler
  96.          move.l  a0,Pointer          ;Textanfangsadresse abspeichern
  97.          clr.l   d0                  ;Textlänge-Zähler = 0
  98. search:  addq.l  #1,d0               ;Zeichen zählen...
  99.          cmp.b   #70,d0              ;mehr als 70 Zeichen ?
  100.          bgt     error               ;kann nicht sein -> Fehler
  101.          cmp.b   #34,(a0)+           ;kommen Anführungsstriche ?
  102.          bne     search              ;nein, dann weiterzählen
  103.          subq.l  #1,d0               ;D0 - 1 = Textlänge
  104.          move.l  RastPort,a1
  105.          move.l  Pointer,a0          ;Textanfang
  106.          move.l  GfxBase,a6
  107.          jsr     Text(a6)            ;Text ausgeben
  108.  
  109. ;----Ordnungsgemäß aus dem CLI aussteigen-----------------------------
  110.  
  111. end:     clr.l   d1                  ;Return-Code = 0 (kein Fehler)
  112. end2:    move.l  $4,a6
  113.          move.l  IntBase,a1
  114.          jsr     CloseLib(a6)        ;Intuition.Library schließen
  115.          move.l  GfxBase,a1
  116.          jsr     CloseLib(a6)        ;Graphics.Library schließen
  117.          move.l  DosBase,a6
  118.          jsr     Exit(a6)            ;beenden
  119.          rts
  120.  
  121. ;----Dezimalzahl auswerten--------------------------------------------
  122.  
  123. getdez:  cmp.b   #32,(a0)+           ;Leerzeichen überlesen
  124.          beq     getdez
  125.          subq.l  #1,a0
  126.          move.l  #2,d1               ;Ziffernzähler setzen
  127.          clr.l   d0
  128.          clr.w   Numbers
  129. loop2:   move.b  (a0)+,d0            ;nächstes Zeichen holen
  130.          cmp.b   #13,d0              ;Carriage_Return ?
  131.          beq     ready               ;dann keine Ziffer mehr
  132.          cmp.b   #44,d0              ;Komma ?
  133.          beq     back                ;dann keine Ziffer mehr
  134.          lea     Numbers,a1          ;Basisadresse der Ziffernspeicher
  135.          add.l   d1,a1
  136.          sub.l   #48,d0              ;ASCII-Code - 48 = Zifferwert
  137.          move.b  d0,(a1)             ;Ziffer abspeichern
  138.          dbra    d1,loop2            ;D1 dekrementieren / D1 = 0 ?
  139.          bra     ready
  140. back:    subq.l  #1,a0               ;A0 wieder auf Komma biegen
  141. ready:   addq.w  #1,d1
  142.          clr.l   d0
  143.          cmp.b   #3,d1               ;D1 noch 2 ?
  144.          bne     cont
  145.          add.l   #4,a7               ;ja, dann keine Ziffer gefunden
  146.          bra     error               ;-> Fehler
  147. cont:    lea     Muls,a2             ;Basisadresse der Multiplikatoren
  148.          add.l   d1,a2
  149.          lea     Numbers,a1
  150.          clr.l   d0
  151.          clr.l   d1
  152.          clr.l   d2
  153.          move.b  2(a1),d0            ;/Beide Bytes holen, damit wort-
  154.          move.b  (a2),d1             ;\weise multipliziert werden kann
  155.          mulu    d1,d0               ;1. Ziffer * Multiplikator
  156.          addq.l  #1,a2
  157.          move.b  1(a1),d1
  158.          move.b  (a2),d2
  159.          mulu    d2,d1               ;2. Ziffer (falls vorhanden)
  160.          add.w   d1,d0
  161.          move.b  (a1),d1
  162.          add.w   d1,d0               ;+ 1. Ziffer (falls vorhanden)
  163.          rts                         ;zurück (D0 enthält Dezimalzahl)
  164.  
  165. ;----Auf Komma prüfen-------------------------------------------------
  166.  
  167. chkcom:  cmp.b   #32,(a0)+           ;Leerzeichen überlesen
  168.          beq     chkcom
  169.          subq.l  #1,a0
  170.          cmp.b   #44,(a0)+           ;kommt Komma ?
  171.          beq     ok                  ;ja, dann zurück
  172.          add.l   #4,a7               ;Stapelzeiger zurückstellen
  173.          bra     error
  174. ok:      rts
  175. ;----Fehler (und beenden)---------------------------------------------
  176.  
  177. error:   move.l  #1,d1               ;Return-Code = 1 (Fehler)
  178.          bra     end2
  179.  
  180. ;---------------------------------------------------------------------
  181.    even
  182. DosName:  dc.b "dos.library",0
  183. DosBase:  dc.l 0
  184. GfxName:  dc.b "graphics.library",0,0
  185. GfxBase:  dc.l 0
  186. IntName:  dc.b "intuition.library",0
  187. IntBase:  dc.l 0
  188. Pointer:  dc.l 0
  189. RastPort: dc.l 0
  190. Numbers:  dc.b 0,0,0                ;Ziffernspeicher
  191. Muls:     dc.b 100,10,1,1           ;Multiplikatoren
  192. APen:     dc.b 0                    ;Zwischenspeicher für Vor.gr.farbe
  193.